Transmission of signals over electric, optic, or wireless and other communication paths has developed significant complexity in the last century. Information is embedded in signals in numerous ways and sent over communications paths that sometimes include elements of electric, optic, and wireless paths in one communication. Depending upon the nature of the communication medium, errors may be introduced into the signal as it propagates through the communication medium. These errors may be generated by deficiencies in the channel, by environmental noise, by equipment malfunction, and by numerous other sources.
Various error detection and or correction techniques have been developed to determine if errors exist and in some cases how to fix them. Some conventional error detection techniques include the calculation and comparison of a checksum, and the use of cyclic redundancy check (CRC). In the checksum method, a transmitted message is accompanied by a numerical value based on a calculation on the number of bits in the message. A receiving station then performs the same calculation on the received message and checks to make sure the numerical value in the transmitted message matches the value calculated by the receiving station. If the values are not the same the receiver can assume that the message has errors. A limitation associated with the conventional use of a checksum for error detection, however, is that it fails to detect the nature of the error, i.e., where the error lies in the received message. Accordingly, such a method does not provide the information necessary to enable the receiver to correct the error.
The cyclic redundancy check (CRC) is a popular method of error detection that is similar to the checksum method, but slightly more advanced. CRC breaks a message into frames and calculates a numerical representation of the frame data. The numerical representation is appended to the frame. Any of a number of calculations/formulae may be used to calculate the CRC value so long as it yields a unique determination of the frame data. In this regard, the use of CRC provides the receiver with frame level resolution of an error in the received message.
A problem with simple error detection schemes is that it only benefits communications by recognizing errors. Once an error is detected, if the receiving device needs the corrupted portion of the communication, it must notify the sender in order to have at least that portion of the communication resent. In error prone or noisy transmission environments this solution is unsatisfactory as the need to resend such information results in too much traffic, especially for shared mediums, and too high of a possibility for continued errors.
Error correction techniques therefore are favored in certain environments. Typically error correction techniques also utilize an error detection mechanism. A common error correction technique is called Forward Error Correction (FEC). FEC, like CRC, appends redundant information in some fashion to corresponding sections of the original information. The difference is that in FEC the redundant information allows for regeneration of the original information, provided certain conditions are met. In this way no request for retransmission is required. Since the information does not have to be retransmitted, the communication throughput will be much higher than a conventional error detection scheme when the error rate in a transmission medium is high. However, a significant problem with conventional error correction techniques such as, e.g., FEC, is that they generally introduce an untenable amount of latency to the communication.